<template>
    <div class="login">
        <vue-particles class="login-bg" color='#39AFFD' :particleOpacity="0.7" :particlesNumber="100" shapeType="circle"
            :particleSize="4" linesColor="#8DD1FE" :linesWidth="1" :lineLinked="true" :lineOpacity="0.4"
            :linesDistance="150" :moveSpeed="3" :hoverEffect="true" hoverMode="grab" :clickEffect="true" clickMode="push">
        </vue-particles>
        <!-- 登录面板 -->
        <div class="login-box">
            <div class="login-box-title">
                后台管理系统
            </div>
            <div class="login-box-from">
                <el-form :model="loginForm" :rules="rules" ref="loginForm" class="demo-ruleForm">
                    <el-form-item prop="username">
                        <el-input v-model="loginForm.username" placeholder="请输入用户名" size="medium">
                            <el-button slot="prepend" icon="el-icon-user"></el-button>
                        </el-input>
                    </el-form-item>
                    <el-form-item prop="password">
                        <el-input v-model="loginForm.password" type="password" placeholder="请输入密码" size="medium">
                            <el-button slot="prepend" icon="el-icon-key"></el-button>
                        </el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" size="medium" :loading="loading" style="width:100%"
                            @click="submit('loginForm')">立即登陆</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </div>

    </div>
</template>

<script>
import md5 from 'js-md5';
import { login } from '@/assets/api/login.js'
import { setToken } from '@/utils/auth'
export default {
    data() {
        let letterRule = (rule, value, callback) => {
            let reg = /^[a-zA-Z0-9_-]{4,18}$/
            if (value === '') {
                callback(new Error('输入内容不能为空'));
            } else if (!reg.test(value)) {
                callback(new Error('请输入字母、数字、下划线'));
            } else {
                callback();
            }
        };
        return {
            loading: false, //登陆状态
            loginForm: {  // 登陆表单
                username: 'admin',
                password: '000000'
            },
            submitForm: {
                username: '',
                password: ''
            },
            rules: {  //登陆验证规则
                username: [
                    { required: true, message: '请输入用户名', trigger: 'blur' },
                    { min: 2, max: 18, message: '长度在 2 到 18 个字符', trigger: 'blur' },
                    { validator: letterRule, trigger: 'blur' }
                ],
                password: [
                    { required: true, message: '请输入密码', trigger: 'blur' },
                    { min: 6, max: 16, message: '长度在 6 到 16 个字符', trigger: 'blur' },
                    { validator: letterRule, trigger: 'blur' }
                ]
            }
        }
    },
    methods: {
        submit(formName) {
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    this.loading = true
                    this.login()
                } else {
                    // console.log('error submit!!');
                    return false;
                }
            });
        },
        login() {
            this.submitForm.password = md5(this.loginForm.password)
            this.submitForm.username=this.loginForm.username;
            login(this.submitForm).then(res => {
                
                localStorage.setItem("user", JSON.stringify(res.data))
                //设置保存的有效时间
                var curTime = new Date().getTime();
                var dateee = new Date().toJSON(curTime);
                var date = new Date(+new Date(dateee) + 4 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '');
                localStorage.setItem("token", JSON.stringify({ data: res.data.token, time: curTime, timelong: date }));
                //存入数据到vuex
                this.$store.commit("user/SET_TOKEN", res.data.token);
                setToken(res.data.token);
                //路由跳转
                // this.$router.push('/index')
                this.$router.push({
                    path: this.$route.query.redirect || '/index'
                })

            }).catch(err => {
                console.log('err', err)
                this.loading=false;
            })

        }
    }
}
</script>

<style scoped>
.login {
    width: 100%;
    height: 100%;
    /* display: flex;
    justify-content: center;
    align-items: center;
    background-image: url('../../assets/image/login.jpg');
    background-repeat: no-repeat;
    background-size: 100% 100%;
    color: #cccccc; */
    position: relative;
}

.login-bg {
    width: 100%;
    height: 100%;
    background: #3E3E3E;
}

.login-box {
    width: 350px;
    /* height: 287px; */
    background: hsla(0, 0%, 100%, .3);
    border-radius: 5px;
    box-shadow: 0 0 2px #f7f7f7;
    border: 1px solid #f7f7f7;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -175px;
    margin-top: -150px;

}

.login-box-title {
    line-height: 50px;
    font-size: 20px;
    color: #ffffff;
    text-align: center;
    border-bottom: 1px solid #ffffff;
}

.login-box-from {
    width: 100%;
    height: auto;
    padding: 30px;
    box-sizing: border-box;
}
</style>